package main

import "fmt"

// 适配的目标

type V5 interface {
	UseV5()
}

// 被适配的角色 适配者

type V220 struct {
}

func (v *V220) Use220V() {
	fmt.Println("使用220v进行充电")
}

// 适配类

type Adopter struct {
	v220 *V220
}

func (a *Adopter) UseV5() {
	fmt.Println("使用适配器进行充电....")

	// 调用适配者的方法
	a.v220.Use220V()
}

func NewAdopter(v220 *V220) *Adopter {
	return &Adopter{v220: v220}
}

//业务类

type Phone struct {
	v V5
}

func NewPhone(v V5) *Phone {
	return &Phone{v: v}
}

// 普通业务功能

func (p *Phone) Charge() {
	fmt.Println("进行了充电...")
	p.v.UseV5()
}

func main() {
	phone := NewPhone(NewAdopter(new(V220)))
	phone.Charge()
}
